package cn.zzf.algs.note.base.collection.v1;

import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;

/**
 * @author GaoFeng2017
 * @date 2019/11/16 9:21
 */
public class Bag<T> implements Iterable<T> {

    /** 首节点 */
    private Node first;
    /** 为节点 */
    private Node last;
    /** 背包长度 */
    private int size;

    private class Node {
        /** 节点值 */
        T item;
        /** 节点的下一个节点 */
        Node next;

        Node(T item) {
            this.item = item;
        }
    }

    public Bag() {

    }

    public void add(T item) {
        Node node = new Node(item);


        // 判断是否已经有首节点
        if (first == null) {
            first = node;
            last = node;
        } else {
            // 没有的话直接将尾节点的值复制last
            last.next = node;
            // 直接改变应
            // 直接将尾节点指向新节点
            last = node;
        }

        // 增加总容量
        size++;

    }

    public boolean isEmpty() {
        return size > 0;
    }

    public int size() {
        return size;
    }

    @Override
    public Iterator<T> iterator(){

        return new Iterator<T>() {

            private Node currentNode = first;

            @Override
            public boolean hasNext() {
                return currentNode != null;
            }

            @Override
            public T next() {
                if (currentNode != null) {
                    T item = currentNode.item;
                    currentNode = currentNode.next;
                    return item;
                }

                return null;
            }

        };
    }

    @Override
    public void forEach(Consumer<? super T> action) {

    }

    @Override
    public Spliterator<T> spliterator() {
        return null;
    }

    public void addFirst(T element) {

    }

    public void reset() {

    }

    public void main(String[] args){

        // 测试代码
    }

}
